﻿using System;
using System.Xml.Serialization;

namespace Kyoh.Lib.Win32API.NetResources
{
    /// <summary>ネットワークリソースの各ノードを表現するクラス。</summary>
	[Serializable]
	[XmlRoot("Resource")]
	public class ResourceNode
	{
		private NetResource mResource;
        /// <summary>ノードに対応するネットワークリソースを表す <see cref="NetResource"/> 構造体を取得します。</summary>
		public NetResource GetNetResource() { return mResource; }

        /// <summary>ネットワークリソースのスコープを取得します。</summary>
		public ResourceScope Scope { get { return mResource.Scope; } }
        /// <summary>ネットワークリソースの種類を取得します。</summary>
		public ResourceType Type { get { return mResource.Type; } }
        /// <summary>ネットワークリソースの表示種別を取得します。</summary>
		public ResourceDisplayType DisplayType { get { return mResource.DisplayType; } }
        /// <summary>ネットワークリソースの用途を取得します。</summary>
		public ResourceUsage Usage { get { return mResource.Usage; } }
        /// <summary>ネットワークリソースのローカル名を取得します。</summary>
		public string LocalName { get { return mResource.LocalName; } }
        /// <summary>ネットワークリソースのネットワーク名を取得します。</summary>
		public string RemoteName { get { return mResource.RemoteName; } }
        /// <summary>ネットワークリソースの接続コメントを取得します。</summary>
		public string Comment { get { return mResource.Comment; } }
        /// <summary>ネットワークリソースの接続プロバイダ名を取得します。</summary>
		public string Provider { get { return mResource.Provider; } }

        /// <summary>接続ユーザ名を取得・設定します。</summary>
		public string UserName { get; set; }
        /// <summary>接続パスワードを取得・設定します。</summary>
		public string Password { get; set; }

		/// <summary>実際に接続されているユーザ名を取得・更新します。</summary>
		public string GetNetUserName()
		{
			return UserName = WindowsNetwork.GetUser(this.RemoteName);
		}

        /// <summary>子ノードのコレクションを取得します。</summary>
		public ResourceNodeCollection Children { get; private set; }
        /// <summary><see cref="ResourceNode"/> クラスの新しいインスタンスを初期化します。</summary>
        /// <param name="resource">ネットワークリソースを表す <see cref="NetResource"/> 構造体。</param>
		public ResourceNode(NetResource resource)
		{
			this.Children = new ResourceNodeCollection();
			this.mResource = resource;
		}
	}
}
